package com.lxm.oauth2server.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.authentication.AuthenticationManager;
import org.springframework.security.config.annotation.authentication.builders.AuthenticationManagerBuilder;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

/**
 * @ClassName: WebSecurityConfig web安全的一些配置
 * @Description:
 *               创建一个配置类继承WebSecurityConfigurerAdapter
 *               加上@Configuration注解 使其成为一个配置类
 *               加上@EnableWebSecurity注解 使其作为安全配置中心
 * @author: liangxingming
 * @date: 2020年05月07日 9:49
 */
@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {

    /**
     * 重写用户相关配置
     * 2、主要配置用户源的一些配置
     * @param auth
     * @throws Exception
     */
    @Override
    protected void configure(AuthenticationManagerBuilder auth) throws Exception {
        super.configure(auth);
        // 此处我将一个简单的用户初始化在内存中
        /*auth.inMemoryAuthentication()
                // 密码编码
                .passwordEncoder(new BCryptPasswordEncoder())
                // 用户名
                .withUser("user")
                // 密码
                .password(new BCryptPasswordEncoder().encode("123456"))
                // 用户角色
                .roles("USER");*/
    }

    /**
     * 网络安全配置
     * @param http
     * @throws Exception
     */
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        //super.configure(http);
        http.authorizeRequests()
                .antMatchers("/**") // 拦截路径
                .authenticated() // 处理方式
                .and()
                .csrf().disable()
                .httpBasic() // 9、通过httpBasic进行认证
                .and()
                .formLogin().loginPage("/login").permitAll() // 允许表单登录
                .defaultSuccessUrl("/holle"); // 表单登录后的跳转界面
    }

    /**
     * 3、重写authenticationManager 不重写AuthoricationServerConfig认证中心中的AuthenticationManager无法注入
     * @return
     * @throws Exception
     */
    @Override
    @Bean
    protected AuthenticationManager authenticationManager() throws Exception {
        return super.authenticationManager();
    }
}
